<?php
/**
 * 用户练习配置接口
 */
namespace service\service;

use service\ext\PageData;
use service\vo\practice\Practice;

interface PracticeService
{
    const ERROR_PRACTICE_NOT_EXISTS = 'ERROR_PRACTICE_NOT_EXISTS';  //数据不存在

    /**
     * 添加练习配置
     * @param Practice $practice    练习配置对象
     * @return int  新增加的id
     */
    public function addPractice(Practice $practice): int;

    /**
     * 删除练习配置
     * @param int $id   练习配置id
     * @return int  影响的行数
     */
    public function deletePracticeById(int $id) : int;

    /**
     * 批量删除练习配置
     * @param array $ids    练习配置id集合
     * @return int  影响的行数
     */
    public function deletePracticeByIds(array $ids) : int;

    /**
     * 删除用户下的练习配置
     * @param int $userId   用户id
     * @return int  影响的行数
     */
    public function deletePracticeByUserId(int $userId) : int;

    /**
     * 批量删除用户下的联系配置
     * @param array $userIds    用户id集合
     * @return int  影响的行数
     */
    public function deletePracticeByUserIds(array $userIds) : int;

    /**
     * 获取练习配置
     * @param int $id   练习配置id
     * @return Practice 练习配置对象
     *
     * @throws
     *  ERROR_PRACTICE_NOT_EXISTS
     */
    public function getPracticeById(int $id) : Practice;

    /**
     * 搜索练习配置
     * @param int $currentPage 当前页
     * @param int $pageSize 每页显示数量
     * @param array $filterCriteria //搜索条件数组，其中的value是搜索值，其中的key从下面字符串中取
     *        'UserId'            =>    用户id
     *        'Mode'            =>    练习模式
     *        'Direction'            =>    练习方向
     *        'AddTime'        =>    时间，array('start'=>'开始时间','end'=>'结束时间')
     * @param array $sorterCriteria //排序条件，其中的value是搜索值，其中的key从下面字符串中取
     *        'ID'    =>    true为升序false为降序
     *
     * @return PageData
     */
    public function searchPractices(int $currentPage, int $pageSize, array $filterCriteria, array $sorterCriteria) : PageData;
}